package algorithm_primary.studyMySelf.sort;

import java.util.Arrays;

/**
 * @author 衡孟浩
 * @date 2023/5/16 21:46
 *
 * 选择排序
 */
public class SelectSort {
    /**
     * 思路:   选择一个最小的与数组中进行比较   一次比较出来一个最小的放在最前边，如果第一次得到一个最小的  那么第二次就从第二个开始
     * @param args
     */
    public static void main(String[] args) {
        int[] arr = {2,4,6,1,3,2,1,5,7,4,7};
        sort(arr);
        System.out.println(Arrays.toString(arr));
    }
    public static void sort(int[] arr){
        if (arr == null || arr.length < 2){
            // 如果为空或者长度小于2   那么说明这个数组不需要排序  因为为null肯定不行   如果小于2那就是1   长度为1也不用排序只有一个
            return;
        }

        for (int i = 0; i < arr.length; i++) {
            // 最外边for这一层表示从第几个开始进行查找

            //这个代表的是一个最小值的下标  默认是从第几个开始的下标   比如前边已经排序了两个   从第三个开始 那么这个minValueIndex就是2  2的下标对应的就是第三个
            int minValueIndex = i;
            for (int j = i+1; j < arr.length; j++) {
                // 里边这个 for是为了找到最小的这个数值

                //这个代表如果  现在循环到的值和我们上边 找到的当前循环中遇到的最小值进行比较     将最小的这个值的下标给当前这个循环见到的最小值的下标留着下次继续比较
                minValueIndex = arr[j] < arr[minValueIndex]?j:minValueIndex;
            }
            // 将最小值的下标和当前开始的下标换位置
            int minValue = arr[minValueIndex];
            arr[minValueIndex] = arr[i];
            arr[i] = minValue;
        }

    }
}
